/*
 *  查询条件构造器 与后端构造器对应,todo常量处理
 *  结构：condition
 *  nomal： 
 *        type == nomal
 *        symbol(操作符): symbol 操作符值为 eq, lt, gt,neq,elt, egt,like,nlike,in,nin
 *        targetField(目标字段)， 
 *        sourceField(来源数据资源)
 *        constant(是否常量赋值，是的话无需替换成对应的值) true ,false
 *  bracket：
 *          type == bracket
 *          bracket 括号值为’(‘ 或者 ’)‘;，  
 *  logic：
 *         type == logic
 *         logic 连接符值为’and‘ 或者 ’or‘;， 
 */

export default class QueryBulider {
    /*
    *  查询条件值映射处理
    *  @param condition 查询条件
    *  @param data 数据源
    */
    build(condition , data = {}) {
      let arr = [];
      if (condition.length) {
        for (let i in condition) {
          let item = condition[i];
          if (!item.type || item.type == "nomal") {
            if(item.constant){
              arr.push({
                symbol: item.symbol,
                paramKey: item.targetField,
                paramValue: item.sourceField,
              });
            } else {
              arr.push({
                symbol: item.symbol,
                paramKey: item.targetField,
                paramValue: data[item.sourceField],
              });
            }
           
          } else if (item.type == "bracket") {
            arr.push({
              type: item.type,
              bracket: item.bracket,
            });
          } else if (item.type == "logic") {
            arr.push({
              type: item.type,
              logic: item.logic,
            });
          }
        }
      }
      return arr;
    }
    // 往数组里面每隔一个对象插入一个对象
    insertArrayBetween(data, arr) {
      // 创建一个新的数组来存储结果
      const result = [];
      // 遍历原始二维数组
      for (let i = 0; i < data.length; i++) {
          // 将当前一维数组添加到结果数组中
          result.push(data[i]);
          // 如果不是最后一个一维数组，则插入新数组
          if (i < data.length - 1) {
              result.push(arr);
          }
      }
      return result;
    }
    // 往数组前面加对
    beforeArrayInsert(data, arr) {
      return data.unshift(arr);
    }
    // 往数组后面加对
    afterArrayInsert(data, arr) {
      return data.push(arr);
    }
  }
  